# 设置 CMake 的最低版本要求
cmake_minimum_required(VERSION 3.10)

# 设置项目的名称和使用的编程语言
project(MyCppProject CXX)

# 设置 C++ 标准为 C++20
set(CMAKE_CXX_STANDARD 23)

# 使用 file(GLOB ...) 获取当前目录下所有 .cpp 文件
file(GLOB SOURCES "*.cpp")

# 排序 SOURCES 列表（字典顺序）
list(SORT SOURCES)

# 获取字典顺序最大的文件
list(LENGTH SOURCES LIST_SIZE)

if(LIST_SIZE GREATER 0)
    set(MAX_NUMBER -1) # 初始化最大数字为负值
    set(MAX_FILE "") # 初始化最大文件为空字符串

    # 遍历 SOURCES 列表中的所有文件
    foreach(FILE ${SOURCES})
        # 从路径中提取文件名部分
        get_filename_component(FILENAME ${FILE} NAME)

        # 获取文件名中的数字部分
        string(REGEX MATCH "[0-9]+" FILE_NUMBER "${FILENAME}")

        # 如果提取到的数字大于当前最大数字，更新最大数字和对应的文件
        if(FILE_NUMBER GREATER ${MAX_NUMBER})
            set(MAX_NUMBER ${FILE_NUMBER})
            set(MAX_FILE ${FILE})
        endif()
    endforeach()

    # 输出最大的文件和数字
    message(STATUS "最大数字对应的文件是: ${MAX_FILE}")
    message(STATUS "提取的最大数字是: ${MAX_NUMBER}")

    # 编译提取数字最大值对应的文件
    if(MAX_FILE)
        message(STATUS "正在编译文件: ${MAX_FILE}")

    # 这里可以添加编译命令，例如：
    # add_executable(${MAX_FILE} ${MAX_FILE})
    else()
        message(WARNING "没有找到包含数字的文件")
    endif()
else()
    message(WARNING "没有 .cpp 文件被发现")
endif()

add_custom_target(Updating_test
    COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_SOURCE_DIR}/test/CMakeLists.txt
    COMMENT "Updating test/CMakeLists.txt timestamp" # 跟新CMakeLists.txt时间戳
)

# 创建可执行文件
add_executable(test ${MAX_FILE})
add_dependencies(test Updating_test)

# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  /STACK:4194304,1048576")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /STACK:4194304,1048576")

# 如果有需要链接的库，可以在这里添加
# target_link_libraries(test some_library)
# /d1reportAllClassLayout
set(CMAKE_CXX_FLAGS "  ${CMAKE_CXX_FLAGS}  /arch:AVX2 /O2 /Zc:nrvo- /WX /W4  /wd4819 /wd4201 /wd4505 /wd4731 /Zi /FC")

# /d1reportAllClassLayout 会导致clangd dump